package org.cis.jproyinv.proyecto.modelo;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.EnumType;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import org.cis.jproyinv.comun.modelo.Docente;

@Entity
public class ProyectoInvestigacion implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;
    @Temporal(TemporalType.DATE)
    private Date fechaCulminacion;
    private String observacion;
    private String dniDocente;
    private String tags;
    private String tema;
    @ManyToOne(cascade = CascadeType.ALL)
    private LineaInvestigacion lineaInvestigacion;
    @OneToMany(mappedBy = "ProyectoInvestigacion", cascade = CascadeType.ALL)
    private List<Objetivo> objetivos = new ArrayList();
    @OneToMany(mappedBy = "ProyectoInvestigacion", cascade = CascadeType.ALL)
    private List<DirectorProyecto> directoresProyecto = new ArrayList();
    @OneToOne(cascade = CascadeType.ALL)
    private Cronograma cronograma;
    @OneToMany(mappedBy = "ProyectoInvestigacion", cascade = CascadeType.ALL)
    private List<Autor> autores = new ArrayList();
    @Enumerated(EnumType.STRING)
    private TipoProyectoInvestigacion m_TipoProyectoInvestigacion;
    @Enumerated(EnumType.STRING)
    private EstadoProyecto m_EstadoProyecto;

    public ProyectoInvestigacion() {
    }

    public ProyectoInvestigacion(Date fechaCulminacion, String observacion, String tags, String tema, TipoProyectoInvestigacion m_TipoProyectoInvestigacion, EstadoProyecto m_EstadoProyecto) {
        this.fechaCulminacion = fechaCulminacion;
        this.observacion = observacion;
        this.tags = tags;
        this.tema = tema;
        this.m_TipoProyectoInvestigacion = m_TipoProyectoInvestigacion;
        this.m_EstadoProyecto = m_EstadoProyecto;
    }

    public List<Autor> getAutores() {
        return autores;
    }

    public void setAutores(List<Autor> autores) {
        this.autores = autores;
    }

    public Cronograma getCronograma() {
        return cronograma;
    }

    public void setCronograma(Cronograma cronograma) {
        this.cronograma = cronograma;
    }

    public List<DirectorProyecto> getDirectoresProyecto() {
        return directoresProyecto;
    }

    public void setDirectoresProyecto(List<DirectorProyecto> directoresProyecto) {
        this.directoresProyecto = directoresProyecto;
    }

    public Date getFechaCulminacion() {
        return fechaCulminacion;
    }

    public void setFechaCulminacion(Date fechaCulminacion) {
        this.fechaCulminacion = fechaCulminacion;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public LineaInvestigacion getLineaInvestigacion() {
        return lineaInvestigacion;
    }

    public void setLineaInvestigacion(LineaInvestigacion lineaInvestigacion) {
        this.lineaInvestigacion = lineaInvestigacion;
    }

    public EstadoProyecto getM_EstadoProyecto() {
        return m_EstadoProyecto;
    }

    public void setM_EstadoProyecto(EstadoProyecto m_EstadoProyecto) {
        this.m_EstadoProyecto = m_EstadoProyecto;
    }

    public TipoProyectoInvestigacion getM_TipoProyectoInvestigacion() {
        return m_TipoProyectoInvestigacion;
    }

    public void setM_TipoProyectoInvestigacion(TipoProyectoInvestigacion m_TipoProyectoInvestigacion) {
        this.m_TipoProyectoInvestigacion = m_TipoProyectoInvestigacion;
    }

    public List<Objetivo> getObjetivos() {
        return objetivos;
    }

    public void setObjetivos(List<Objetivo> objetivos) {
        this.objetivos = objetivos;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public String getTags() {
        return tags;
    }

    public void setTags(String tags) {
        this.tags = tags;
    }

    public String getTema() {
        return tema;
    }

    public void setTema(String tema) {
        this.tema = tema;
    }

    public String getDniDocente() {
        return dniDocente;
    }

    public void setDniDocente(String dniDocente) {
        this.dniDocente = dniDocente;
    }

    @Override
    public String toString() {
        return this.getTema();
    }
}